好!已經學了基本型別、基本運算子,那來補充一些基礎計算題!
預計練習題目:
1.輸入x,y,計算(x+y)/2
2.輸入x,y,計算x²-y²
3.輸入x,計算y=√?
4.輸入x,計算log(x)、log(a,10)、log10(a)
5.輸入x,計算y=sin(x)
會介紹的方法有:Math.Pow()、Math.Sqrt()、Math.Log()、Math.Log10()、Math.Log2()、Math.Sin()
以及輸出方法Console.WriteLine帶參數的寫法Console.WriteLine("x = {0}, y={1},z={2}", x,y,z)
int x, y;//宣告兩個變數
Console.Write("請輸入 x:");//在螢幕上show出請輸入 x:
x = int.Parse(Console.ReadLine());
//Console.ReadLine()是讀鍵盤輸入的值,且回傳string
//但是x是int,無法儲存string的值,所以這裡我們將string轉型為int
//轉型也可以寫x = Convert.ToInt32(Console.ReadLine());
Console.Write("請輸入 y:");
y = int.Parse(Console.ReadLine());
Console.WriteLine("x = {0}, y={1},答案={2}", x,y,(x+y)/2);
//這裡也可以宣告一個新變數接x+y的值,例如z=(x+y)/2,Console.WriteLine("x = {0}, y={1},答案={2}", x,y,z);
Console.ReadKey();
輸出結果:
什麼?你說如果輸入3跟6的話答案怪怪的?
這是一開始很容易忽略的地方,如同這一篇的算術運算子除法說明,因為我的程式碼宣告變數時宣告為int,所以是不會顯示小數的喔~把x,y宣告改成double即可
欸欸還有輸出的時候{0},{1},{2}是什麼意思?
這樣寫比較簡潔。當然你也可以一個一個字串慢慢串,像下方這樣
Console.WriteLine("x ="+x+", y="+y+",答案="+(x+y)/2);
可是當字串一長,要在整串裡面找到變數修改很麻煩,要一直用+也很麻煩,要改個順序也很麻煩ಠ_ಠ
身為一個即將成為後端工程師的人兒,還是學學這個用法吧=ˇ=
================================================
感謝下方留言處YoChen大大補充以下兩點,
1.之所以可以用{}這樣表示,是因為使用了String.Format這個方法,Console.WriteLine已經將它整合在overload裡面,所以才能像這樣直接使用。之後會有一篇文章介紹String.Format。
2.另外目前如果想要字串中插入變數,在C#6.0之後,提供了string interpolation(字串插補)方法,可以在字串宣告前方加入 $ 符號,搭配{ },就可以直接用插值的方式傳入變數。
也就是說上面的程式碼可以這麼改寫
Console.WriteLine("x = {0}, y={1},答案={2}", x,y,(x+y)/2);
//等同於
Console.WriteLine($"x = {x}, y={y},答案={(x+y)/2}");
=================================================
double a, b;
Console.WriteLine("以下計算a平方-b平方");//輸出此段文字並換行
Console.Write("請輸入 a = ");//輸出此段格式
a = Convert.ToDouble(Console.ReadLine());
Console.Write("請輸入 b = ");
b = Convert.ToDouble(Console.ReadLine());
Console.WriteLine("a平方-b平方={0}", Math.Pow(a, 2)-Math.Pow(b,2));
Console.Read();
輸出結果:
求次方的方式:Math.Pow(double 底數,double 幾次方)
這題有兩個解法
double a;
Console.WriteLine("求a開根號");
Console.Write("請輸入 a = ");
a = Convert.ToDouble(Console.ReadLine());
Console.WriteLine("a開根號={0}", Math.Pow(a,0.5));
Console.Read();
double a;
Console.WriteLine("求a開根號");
Console.Write("請輸入 a = ");
a = Convert.ToDouble(Console.ReadLine());
Console.WriteLine("a開根號={0}", Math.Sqrt(a));
Console.Read();
Math.Sqrt(double 指定數字)
若輸入負值,則回傳NaN(非數值)
Console.WriteLine("求log(a) 及 log(a,10) 及log10(a)");
Console.Write("請輸入 a = ");
double number = Convert.ToDouble(Console.ReadLine());
Console.WriteLine("log(a)={0} 及 log(a,10)={1} 及 log10(a)={2}", Math.Log(number), Math.Log(number, 10), Math.Log10(number));
Console.Read();
log這裡用的是Math.Log的方法,跟log相關有四種使用方法
Math.Log(double x)以e = 2.718為底
Math.Log(double 數字,double 底數)以後方數字為底
Math.Log10(double x),以10為底
Math.Log2(double x),以2為底
double a;
Console.WriteLine("求sin(a)");
Console.Write("請輸入 a = ");
a = Convert.ToDouble(Console.ReadLine());
Console.WriteLine("sin(a)={0}", Math.Sin(a));
Console.Read();
Math.Sin(double x)
1.x必須是弧度,但我們熟悉的計算是角度,角度跟弧度換算公式為
pi可以使用Math.PI,C#的 π 精確到小數點後16位
2.a值範圍從大約-9223372036854775295 到大約9223372036854775295,超出此範圍會原封不動傳回,不會報錯
cos傳送門
tan傳送門
注意以上Math方法無論是參數或是傳回值,型態都是double
欸欸還有輸出的時候{0},{1},{2}是什麼意思?
...((太多了,中間略過~XDDD
身為一個即將成為後端工程師的人兒,還是學學這個用法吧=ˇ=
這個地方可能要稍微提到一下String.Format這個方法,由於Console.WriteLine已經將它整合在overload裡面,所以才能像這樣直接使用,不然大部分對於一般的字串,如果需要使用一樣的整理方式,就必須使用String.Format, ex.
string a = "Hello";
string b = "World";
string formatAB = String.Format("{0} ~ {1}", a, b);
Console.WriteLine(formatAB); // 輸出: Hello ~ World
// 結果等同於
Console.WriteLine("{0} ~ {1}", a, b); // 輸出: Hello ~ World
這樣就不會被局限在特定方法中了~XDDD
另外補充一點,在C#6.0之後,提供了最新的string interpolation方法,只需要在字串宣告前方加入 $ 符號,就可以直接用插值的方式傳入變數~ ex.
string a = "Hello";
string b = "World";
string before = String.Format("{0} ~ {1}", a, b);
string now = $"{a} ~ {b}";
Console.WriteLine("{0} ~ {1}", a, b); // 輸出: Hello ~ World
Console.WriteLine(before); // 輸出: Hello ~ World
Console.WriteLine(now); // 輸出: Hello ~ World
感謝YoChen大大補充!!!讓我瞬間接上了某條線XD
$超方便XDD!!居然忘記介紹它了XD立馬補充!